package users

import (
	"encoding/json"
	"fmt"
	"github.com/bitly/go-simplejson"
	"github.com/gin-gonic/gin"
	"io/ioutil"
	"log"
	"net/http"
)

//	{
//		"code": 20000,
//		"data": {
//			"accessToken": "admin-token"
//		}
//	}

type loginRequest struct {
	Username string `form:"username"` // 用户名
	Password string `form:"password"` // 密码
}

type loginResponse struct {
	Token string `json:"token"` // 用户身份标识
}

type Response struct {
	Code int  `json:"code"`
	Data Data `json:"data"`
}
type Data struct {
	AccessToken string   `json:"token"`
	UserInfo    UserInfo `json:"userInfo"`
}

type UserInfo struct {
	Username string `json:"username"`
	ImgUrl   string `json:"imgUrl"`
	Email    string `json:"email"`
}

func doLogin(ctx *gin.Context) {
	log.Println("访问登录接口, payload信息:", ctx.Request)

	// post接口，获取body payload
	rData, _ := ioutil.ReadAll(ctx.Request.Body)
	sParaJson, err := simplejson.NewJson(rData)
	log.Println("sParaJson:", sParaJson)

	username, err1 := sParaJson.Get("username").String()
	if err1 != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{
			"retcode": -1,
			"data":    nil,
			"message": "必传参数：username！" + username,
		})
		return
	}

	_, err2 := sParaJson.Get("password").String()
	if err2 != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{
			"retcode": -1,
			"data":    nil,
			"message": "必传参数：password！" + username,
		})
		return
	}

	//获取参数 paras
	//if username, isExist := ctx.GetQuery("username"); isExist != true {
	//	ctx.JSON(http.StatusBadRequest, gin.H{
	//		"retcode": -1,
	//		"data":    nil,
	//		"message": "必传参数：username！" + username,
	//	})
	//	return
	//}
	//if _, isExist := ctx.GetQuery("password"); isExist != true {
	//	ctx.JSON(http.StatusBadRequest, gin.H{
	//		"retcode": -1,
	//		"data":    nil,
	//		"message": "必传参数：password！",
	//	})
	//	return
	//}

	data := Data{AccessToken: "admin-token"}
	resp := Response{Code: 200, Data: data}
	byteArray, err := json.Marshal(resp)
	if err != nil {
		fmt.Println(err)
	}
	log.Println("访问登录成功")
	fmt.Println(string(byteArray))

	//codeByteArray, _ := json.Marshal(resp.Code)
	//dataByteArray, _ := json.Marshal(resp.Data)

	//ctx.JSON(http.StatusOK, gin.H{
	//	"code": string(codeByteArray),
	//	"data": string(dataByteArray),
	//})
	ctx.JSON(http.StatusOK, resp)
}
